`default_nettype none

`define CLK_FREQ 27_000_000
`define KEY_THRESHOLD (`CLK_FREQ / 40)  // 需要持续25毫秒

`define DIV_CLK_DEFAULT (`CLK_FREQ / 8) // 默认时钟为8hz
`define DIV_DEFAULT_KEY_A 2             // 按下A键时，时钟周期增加到2倍。
`define DIV_DEFAULT_KEY_B 4             // 按下B键时，时钟周期增加到4倍。

module test_clk_div_m (
    input rst_w_ni,
    input clk_w_i,
    input key_a_w_ni,
    input key_b_w_ni,

    output led_green_w_no
);
    wire arsr_w_nl;
    arsr_m arsr_i_l (
        .rst_w_ni(rst_w_ni),
        .clk_w_i (clk_w_i),

        .rst_w_no(arsr_w_nl)
    );

    wire default_clk_w_l;
    clk_even_div_m #(
        .DIV_DIV_2_CP_I(`DIV_CLK_DEFAULT / 2)
    ) default_div_i_l (
        .rst_w_ni(arsr_w_nl),
        .clk_w_i (clk_w_i),
        .clk_w_o (default_clk_w_l)
    );

    wire middle_w_l;
    sel_clk_div_m #(
        .DIV_CP_I(`DIV_DEFAULT_KEY_A)
    ) div_a_i_l (
        .rst_w_ni(arsr_w_nl),
        .clk_w_i (default_clk_w_l),
        .div_w_ni(key_a_w_ni),
        .clk_w_o (middle_w_l)
    );

    sel_clk_div_m #(
        .DIV_CP_I(`DIV_DEFAULT_KEY_B)
    ) div_b_i_l (
        .rst_w_ni(arsr_w_nl),
        .clk_w_i (middle_w_l),
        .div_w_ni(key_b_w_ni),
        .clk_w_o (led_green_w_no)
    );
endmodule
